#ifndef GOBANGWINDOW_H
#define GOBANGWINDOW_H

#include <QMainWindow>
#include <QPainter>
#include <QMouseEvent>
#include <QTimer>
#include <QStack>
#include <QLabel>
#include <QPushButton>

class GobangWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit GobangWindow(QWidget *parent = nullptr);
    ~GobangWindow();

protected:
    void paintEvent(QPaintEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;
    void resizeEvent(QResizeEvent *event) override;

private slots:
    void updateTimer();
    void onUndoClicked();
    void onRestartClicked();

private:
    // 游戏常量
    static const int BOARD_SIZE = 15;    // 15x15棋盘
    static const int CELL_SIZE = 40;     // 格子大小
    static const int MARGIN = 30;        // 边距
    static const int TIME_LIMIT = 300;   // 5分钟时间限制(秒)

    // 游戏状态
    int board[BOARD_SIZE][BOARD_SIZE];   // 棋盘状态(0:空,1:黑,2:白)
    bool isBlackTurn;                    // 当前回合
    bool gameOver;                       // 游戏结束标志
    QStack<QPoint> moveHistory;          // 棋步历史(用于悔棋)

    // 计时相关
    QTimer *timer;
    int blackTime;                       // 黑方剩余时间
    int whiteTime;                       // 白方剩余时间

    // UI组件
    QLabel *blackTimeLabel;
    QLabel *whiteTimeLabel;
    QLabel *currentPlayerLabel;
    QPushButton *undoButton;
    QPushButton *restartButton;

    // 初始化方法
    void initGame();
    void initUI();
    void setupLayout();

    // 游戏逻辑方法
    void placePiece(int x, int y);
    bool checkWin(int x, int y);
    bool checkFiveInLine(int x, int y, int dx, int dy);
    void switchPlayer();
    void endGame(bool blackWins);

    // 绘制方法
    void drawBoard(QPainter &painter);
    void drawPieces(QPainter &painter);
    void drawMarkers(QPainter &painter);

    // 辅助方法
    QPoint screenToBoard(const QPoint &pos) const;
    bool isValidPosition(int x, int y) const;
    void updateTimeDisplay();
    void showGameResult(const QString &message);
};
#endif // GOBANGWINDOW_H
